package com.bd.scm.module.utils.qywx;

import com.bd.utils.wechat.pojo.AccessToken;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Oauth2类
 *
 * @author Engineer.Jsp
 * @date 2014.10.13
 */

public class GOauth2Core {
	private static Logger log = LoggerFactory.getLogger(GOauth2Core.class);
	public static AccessToken accessToken = null;
    public static String GET_CODE = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=a123#wechat_redirect";
    /**
     * 企业获取code地址处理
     * @param appid 企业的CorpID
     * @param redirect_uri 授权后重定向的回调链接地址，请使用urlencode对链接进行处理
     * @param response_type 返回类型，此时固定为：code
     * @param scope 应用授权作用域，此时固定为：snsapi_base
     * @param state 重定向后会带上state参数，企业可以填写a-zA-Z0-9的参数值
     * @param #wechat_redirect 微信终端使用此参数判断是否需要带上身份信息
     * 员工点击后，页面将跳转至 redirect_uri/?code=CODE&state=STATE，企业可根据code参数获得员工的userid
     * */
    public static String GetCode(){
        String get_code_url = "";
        get_code_url = GET_CODE.replace("CORPID", WeiXinParamesUtil.getProperty("corpId")).replace("REDIRECT_URI", "http://www.shanghaibuda.com:8080/weixin/oauth2Servlet");
        return get_code_url;
    }
    public static String CODE_TO_USERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESSTOKEN&code=CODE&agentid=AGENTID";

    /**
     * 根据code获取成员信息
     * @param access_token 调用接口凭证
     * @param code 通过员工授权获取到的code，每次员工授权带上的code将不一样，code只能使用一次，5分钟未被使用自动过期
     * @param agentid 跳转链接时所在的企业应用ID
     * 管理员须拥有agent的使用权限；agentid必须和跳转链接时所在的企业应用ID相同
     * @throws Exception
     * */
    public static String GetUserID (String access_token,String code ,String agentid) throws Exception{

        //第二步保证用最新凭证获取用户账号
        String UserId = "";
        String url = CODE_TO_USERINFO.replace("ACCESSTOKEN", access_token).replace("CODE", code).replace("AGENTID", agentid);
        JSONObject jsonobject = WeiXinUtil.httpRequest(url, "GET", null);
        if(null!=jsonobject){
        	log.info("获取微信客户端反馈信息:"+jsonobject.toString());
        	if("ok".equals(jsonobject.getString("errmsg"))) {
        		UserId = jsonobject.getString("UserId");
        	}
            if(!"".equals(UserId)){
            	//log.info("获取信息成功，o(∩_∩)o ————UserID:"+UserId);
            }else{
                int errorrcode = jsonobject.getInt("errcode");
                String errmsg = jsonobject.getString("errmsg");
                log.info("错误码："+errorrcode+"————"+"错误信息："+errmsg);
            }
        }else{
        	log.info("获取授权失败了，●﹏●，自己找原因。。。");
        }
        return UserId;
    }

    //判断2个日期是否相差2小时
    public static boolean  between(String date) {
    	Date newDate = new Date();
    	Date oldDate = strToDateLong(date);
    	long between = newDate.getTime() - oldDate.getTime();
    	if(between >= (2* 3600000)){
    		return true;
    	}
    	return false;
    }

    /**
     * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
     *
     * @param strDate
     * @return
     */
    public static Date strToDateLong(String strDate) {
	     SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	     ParsePosition pos = new ParsePosition(0);
	     Date strtodate = formatter.parse(strDate, pos);
	     return strtodate;
    }

}
